#ifndef TEST_TYPENAME_
#define TEST_TYPENAME_

// typename的使用场合
// 1.在模板定义中，表明其后的模板参数是类型参数

// 函数模板 typename后跟一个类型
template <typename T, int a, int b>
int func(T c)
{
}

// 类模板
// 名字为T的模板参数
template <typename T>
class A
{
public:
    typedef int B;
};

class C
{
public:
    typedef int D;
};

// 2.使用类的类型成员，用typename标识这是一个类型
//  int Time::static_field = 5;
template <typename T>
typename A<T>::B test_1() {}

typename C::D test_2() {}

#endif